﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionContrato;
using ClickLand.CorporacionPlaza.Presentacion.Controladores;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;
using ClickLand.CorporacionPlaza.Utilidades;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionContrato
{
    /// <summary> Presentador de la vista que genera las facturas </summary>
    public class PresentadorGenerarFactura : PresentadorBase
    {
        #region Atributos

        /// <summary> Objeto que posee la definicion del controlador del modulo </summary>
        private ControladorAdministracionContrato _controlador;


        /// <summary> Objeto que posee la definicion de las propiedades de la vista </summary>
        private readonly IGenerarFactura _vista;

        #endregion

        #region Constructor

        /// <summary> Constructor de la clase </summary>
        /// <param name="vista"> Objeto que posee las propiedades de la vista</param>
        public PresentadorGenerarFactura(IGenerarFactura vista)
        {
            _vista = vista;
            _controlador = new ControladorAdministracionContrato();
        }

        #endregion

        #region Metodos

        /// <summary> Metodo que realiza las operaciones para cargar la pagina </summary>
        public void CargarPagina()
        {

            var contrato = new ContratoDto{Estado = 1};
            if (_vista.FacturaMantenimiento)
                contrato.Establecimiento = new EstablecimientoDto() { Id = 2 };
            _vista.ListaContratos = _controlador.BuscarContrato(contrato);
        }

        
        /// <summary> Metodo que se encarga de buscar las ventas dados los parametros indicados </summary>
        public void Imprimir()
        {
            var contrato = _vista.ContratoSeleccionado;
            if (contrato != null  && contrato.Establecimiento.Tipo.Id == 2)
                _controlador.BuscarVentas(contrato, _vista.FechaInicio,
                                          _vista.FechaFin);

            if(contrato == null)
            {
                ImprimirReporte(_vista.ListaContratos);
            }
            else
            {
                var lista = new List<ContratoDto>();
                lista.Add(contrato);
                ImprimirReporte(lista);
            }

        }


        /// <summary> Metodo que se encarga de buscar las ventas dados los parametros indicados </summary>
        public void ImprimirMantenimiento()
        {
            var contrato = _vista.ContratoSeleccionado;
            if(contrato == null)
            {
                ImprimirReporteMantenimiento(_vista.ListaContratos);
            }
            else
            {
                var lista = new List<ContratoDto>();
                lista.Add(contrato);
                ImprimirReporteMantenimiento(lista);
            }

        }
        

        /// <summary> Metodo que se encarga de imprimir los reportes de mantenimento  </summary>
        /// <param name="lista">Lista de Contratos a imprimir</param>
        public void ImprimirReporteMantenimiento(List<ContratoDto> lista)
        {
            Document document = new Document();
            PdfPTable tabla;
            PdfPCell celdaTitulo;
            try
            {
                PdfWriter.GetInstance(document,
                                      new FileStream(ConfigurationManager.AppSettings["RutaDescarga"] +
                                                     "Facturas.pdf", FileMode.Create));
                document.SetMargins(36, 36, 150, 100);
                document.Open();
                int facturas = 0;
                int iva = Convert.ToInt32(ConfigurationManager.AppSettings["IVA"]);
                bool hayFacturas = false;
                int porcentajeMantenimiento = Convert.ToInt32(ConfigurationManager.AppSettings["PorcentajeMantenimiento"]);
                foreach (var contrato in lista)
                {
                    foreach (var pension in contrato.Pension.ContratoPensiones)
                    {
                        var cantidad = DateDiff(DateInterval.Month, pension.FechaInicio, pension.FechaFin);
                        for (var i = 0; i < cantidad - 1; i++)
                        {
                            DateTime fecha = pension.FechaInicio.AddMonths(i);
                            if (fecha < _vista.FechaInicio || fecha > _vista.FechaFin) continue;

                            DateTime fechaPeriodo = new DateTime(fecha.Year, fecha.Month, 1);
                            List<VentaDto> ventas = _controlador.BuscarVentas(contrato,fechaPeriodo, fechaPeriodo.AddMonths(1).AddDays(-1));
                            
                            float monto = 0;
                            if (ventas != null && ventas.Count > 0)
                            {
                                monto = ventas[0].Monto * ((float) porcentajeMantenimiento / 100);
                            }
                            else
                                continue;

                            #region Datos Cliente

                            tabla = new PdfPTable(4);
                            tabla.WidthPercentage = 100;

                            tabla.HorizontalAlignment = Element.ALIGN_LEFT;


                            string formatoFecha = string.Format("Fecha, {0} de {1} de {2}", DateTime.Now.Day,
                                                                DateTime.Now.ToString("MM"), DateTime.Now.Year);
                            celdaTitulo =
                                new PdfPCell(new Phrase( "Fecha, " + DateTime.Now.ToString("dd/MM/yyyy"), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Nombre o Razón Social:",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(contrato.Cliente.Nombre,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            celdaTitulo.Colspan = 3;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Dirección Fiscal:",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(contrato.Establecimiento.Lugar,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            celdaTitulo.Colspan = 3;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            string numeroCelular= string.IsNullOrEmpty(contrato.Cliente.NumeroCelular)
                                                       ? "-"
                                                       : contrato.Cliente.NumeroCelular;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Tlf. Celular: " + numeroCelular,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            string numeroOficina = string.IsNullOrEmpty(contrato.Cliente.NumeroOficina)
                                                       ? "-"
                                                       : contrato.Cliente.NumeroOficina;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Tlf. Oficina: " + numeroOficina,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("RIF/CI: " + contrato.Cliente.DocumentoIdentificacion,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase("Establecimiento: " + contrato.Establecimiento.Numero,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase("Tipo de Pago: De Contado",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            document.Add(tabla);
                            #endregion


                            #region Datos Canon

                            tabla = new PdfPTable(9);
                            tabla.WidthPercentage = 100;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Descripción", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            celdaTitulo.Colspan = 6;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Precio Unitario", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("%\nAlic.", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Total", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);


                            string descripcion = ConfigurationManager.AppSettings["DescripcionMantenimiento"].Replace("\\n", "\n");

                            celdaTitulo =
                                new PdfPCell(new Phrase(string.Format(descripcion, contrato.Establecimiento.NombreExtendido, fechaPeriodo.ToString("dd/MM/yyyy"), fechaPeriodo.AddMonths(1).AddDays(-1).ToString("dd/MM/yyyy")),
                                                 FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 6;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo = new PdfPCell(new Phrase(monto.ToString("N"), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo = new PdfPCell(new Phrase(iva.ToString(), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 6;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 5;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("SUB - TOTAL Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Base Imponible Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("IVA " + iva + "% Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase((monto * (float)iva / 100).ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 5;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.BorderWidthRight = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("TOTAL Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase((monto * (1 + (float)iva / 100)).ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);


                            #endregion


                            hayFacturas = true;
                            var titulo = new Chunk("\n\n\n",
                                         FontFactory.GetFont("Verdana", 11, Font.BOLD));
                            var ptitulo = new Paragraph();
                            ptitulo.Alignment = Element.ALIGN_CENTER;
                            ptitulo.Add(titulo);
                            document.Add(ptitulo);

                            document.Add(tabla);
                            document.NewPage();
                            facturas++;
                        }
                    }
                }

                if (!hayFacturas)
                {
                    var titulo = new Chunk("No se puede cargar facturas para la fecha",
                                           FontFactory.GetFont("Verdana", 11, Font.BOLD));
                    var ptitulo = new Paragraph();
                    ptitulo.Alignment = Element.ALIGN_CENTER;
                    ptitulo.Add(titulo);
                    document.Add(ptitulo);
                }
                    
                document.Close();
            }
            catch (Exception e)
            {
                if (document.IsOpen())
                    document.Close();
            }
        }


        /// <summary>  Metodo que se encarga de las operaciones para imprimir las facturas de los canon </summary>
        /// <param name="lista">Lista de contratos a imprimir las facturas</param>
        public void ImprimirReporte(List<ContratoDto> lista)
        {
            Document document = new Document();
            PdfPTable tabla;
            PdfPCell celdaTitulo;
            try
            {
                int iva = Convert.ToInt32(ConfigurationManager.AppSettings["IVA"]);
                PdfWriter.GetInstance(document,
                                      new FileStream(ConfigurationManager.AppSettings["RutaDescarga"] +
                                                     "Facturas.pdf", FileMode.Create));
                document.SetMargins(36, 36, 150, 100);
                document.Open();
                int facturas = 0;

                foreach (var contrato in lista)
                {
                    foreach (var pension in contrato.Pension.ContratoPensiones)
                    {
                        var cantidad = DateDiff(DateInterval.Month, pension.FechaInicio, pension.FechaFin);
                        for (var i = 0; i < cantidad - 1; i++)
                        {
                            DateTime fecha = pension.FechaInicio.AddMonths(i);
                            if (fecha < _vista.FechaInicio || fecha > _vista.FechaFin) continue;

                            #region Datos Cliente

                            tabla = new PdfPTable(4);
                            tabla.WidthPercentage = 100;

                            tabla.HorizontalAlignment = Element.ALIGN_LEFT;


                            string formatoFecha = string.Format("Fecha, {0} de {1} de {2}", DateTime.Now.Day,
                                                                DateTime.Now.ToString("MM"), DateTime.Now.Year);
                            celdaTitulo =
                                new PdfPCell(new Phrase("Fecha, " + DateTime.Now.ToString("dd/MM/yyyy"), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Nombre o Razón Social:",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(contrato.Cliente.Nombre,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            celdaTitulo.Colspan = 3;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Dirección Fiscal:",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(contrato.Establecimiento.Lugar,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            celdaTitulo.Colspan = 3;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            string numeroCelular = string.IsNullOrEmpty(contrato.Cliente.NumeroCelular)
                                                       ? "-"
                                                       : contrato.Cliente.NumeroCelular;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Tlf. Celular: " + numeroCelular,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            string numeroOficina = string.IsNullOrEmpty(contrato.Cliente.NumeroOficina)
                                                       ? "-"
                                                       : contrato.Cliente.NumeroOficina;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Tlf. Oficina: " + numeroOficina,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("RIF/CI: " + contrato.Cliente.DocumentoIdentificacion,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase("Establecimiento: " + contrato.Establecimiento.Numero,
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo =
                                new PdfPCell(new Phrase("Tipo de Pago: De Contado",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_LEFT;
                            celdaTitulo.Colspan = 4;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            document.Add(tabla);
                            #endregion

                            var titulo = new Chunk("\n\n\n",
                                         FontFactory.GetFont("Verdana", 11, Font.BOLD));
                            var ptitulo = new Paragraph();
                            ptitulo.Alignment = Element.ALIGN_CENTER;
                            ptitulo.Add(titulo);
                            document.Add(ptitulo);

                            #region Datos Canon

                            tabla = new PdfPTable(9);
                            tabla.WidthPercentage = 100;
                            celdaTitulo =
                                new PdfPCell(new Phrase("Descripción", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            celdaTitulo.Colspan = 6;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Precio Unitario", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("%\nAlic.", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Total", FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.VerticalAlignment = Element.ALIGN_MIDDLE;
                            tabla.AddCell(celdaTitulo);


                            string descripcion = ConfigurationManager.AppSettings["DescripcionCanon"].Replace("\\n", "\n");

                            DateTime fechaPeriodo = new DateTime(fecha.Year, fecha.Month, 1);

                            List<VentaDto> ventas = _controlador.BuscarVentas(contrato, fechaPeriodo, fechaPeriodo.AddMonths(1));
                            float monto = 0;
                            if (ventas != null && ventas.Count > 0)
                            {
                                if (pension.Monto < (ventas[0].Monto * (contrato.PorcentajeVenta / 100)))
                                    monto = ventas[0].Monto;
                                else
                                    monto = pension.Monto;
                            }
                            else
                                monto = pension.Monto;

                            celdaTitulo =
                                new PdfPCell(new Phrase(string.Format(descripcion, contrato.Establecimiento.NombreExtendido, fechaPeriodo.ToString("dd/MM/yyyy"), fechaPeriodo.AddMonths(1).AddDays(-1).ToString("dd/MM/yyyy")),
                                                 FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 6;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo = new PdfPCell(new Phrase(monto.ToString("N"), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);


                            celdaTitulo = new PdfPCell(new Phrase(iva.ToString(), FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthBottom = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 6;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.MinimumHeight = document.PageSize.Height / 3;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 5;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("SUB - TOTAL Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Border = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("Base Imponible Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(monto.ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("IVA " + iva + "% Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase((monto * (float)iva / 100).ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase(" ",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 5;
                            celdaTitulo.BorderWidthTop = 0;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.BorderWidthRight = 0;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase("TOTAL Bs.",
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.BorderWidthLeft = 0;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);

                            celdaTitulo =
                                new PdfPCell(new Phrase((monto * (1 + (float)iva / 100)).ToString("N"),
                                                        FontFactory.GetFont("Verdana", 10)));
                            celdaTitulo.HorizontalAlignment = Element.ALIGN_CENTER;
                            celdaTitulo.Colspan = 2;
                            tabla.AddCell(celdaTitulo);


                            #endregion

                            document.Add(tabla);
                            document.NewPage();
                            facturas++;
                        }
                    }
                }

                if (facturas == 0)
                {
                    var titulo = new Chunk("No se puede cargar facturas para la fecha",
                                           FontFactory.GetFont("Verdana", 11, Font.BOLD));
                    var ptitulo = new Paragraph();
                    ptitulo.Alignment = Element.ALIGN_CENTER;
                    ptitulo.Add(titulo);
                    document.Add(ptitulo);
                }

                document.Close();
            }
            catch (Exception e)
            {
                if (document.IsOpen())
                    document.Close();
            }
        }


        #endregion

    }
}
